using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using EntidadesTO;

namespace AccesoDatos
{
    public class PredioDA
    {
        public List<PredioTO> BuscarPredioFiltro(int pCodPredio, string pNomVia, int pNroPredio,
                                                 string pInteriorPredio, string pDptoPredio, int pSecDistrito)
        {
            List<PredioTO> listaPredio = new List<PredioTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_Predio_filter", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodPredio", pCodPredio);
                comando.Parameters.AddWithValue("@pNomVia", pNomVia);
                comando.Parameters.AddWithValue("@pNroPredio", pNroPredio);
                comando.Parameters.AddWithValue("@pInteriorPredio", pInteriorPredio);
                comando.Parameters.AddWithValue("@pDptoPredio", pDptoPredio);
                comando.Parameters.AddWithValue("@pSecDistrito", pSecDistrito);
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    PredioTO predioTO = new PredioTO();
                    predioTO.CodPredio = reader.GetInt32(reader.GetOrdinal("codPredio"));
                    predioTO.NomVia = reader.GetString(reader.GetOrdinal("nomVia"));
                    predioTO.NroPredio= reader.GetInt32(reader.GetOrdinal("nroPredio"));
                    predioTO.InteriorPredio = reader.GetString(reader.GetOrdinal("interiorPredio"));
                    predioTO.DptoPredio = reader.GetString(reader.GetOrdinal("dptoPredio"));
                    predioTO.AreaTotalTerreno = reader.GetDecimal(reader.GetOrdinal("areaTotalTerreno"));
                    predioTO.AreaConstruidaTerreno = reader.GetDecimal(reader.GetOrdinal("areaConstruidaTerreno"));
                    predioTO.ValorPredio = reader.GetDecimal(reader.GetOrdinal("valorPredio"));
                    predioTO.SecDistrito = reader.GetInt32(reader.GetOrdinal("secDistrito"));
                    predioTO.DesDistrito = reader.GetString(reader.GetOrdinal("desDistrito"));
                    predioTO.ObtenerDireccionCompleta();

                    listaPredio.Add(predioTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaPredio = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaPredio;

        }

        public List<PredioTO> BuscarPredioLlave(int pCodPredio)
        {
            List<PredioTO> listaPredio = new List<PredioTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_Predio_key", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodPredio", pCodPredio);
                
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    PredioTO predioTO = new PredioTO();
                    predioTO.CodPredio = reader.GetInt32(reader.GetOrdinal("codPredio"));
                    predioTO.NomVia = reader.GetString(reader.GetOrdinal("nomVia"));
                    predioTO.NroPredio = reader.GetInt32(reader.GetOrdinal("nroPredio"));
                    predioTO.InteriorPredio = reader.GetString(reader.GetOrdinal("interiorPredio"));
                    predioTO.DptoPredio = reader.GetString(reader.GetOrdinal("dptoPredio"));
                    predioTO.AreaTotalTerreno = reader.GetDecimal(reader.GetOrdinal("areaTotalTerreno"));
                    predioTO.AreaConstruidaTerreno = reader.GetDecimal(reader.GetOrdinal("areaConstruidaTerreno"));
                    predioTO.ValorPredio = reader.GetDecimal(reader.GetOrdinal("valorPredio"));
                    predioTO.SecDistrito = reader.GetInt32(reader.GetOrdinal("secDistrito"));
                    predioTO.DesDistrito = reader.GetString(reader.GetOrdinal("desDistrito"));
                    predioTO.ObtenerDireccionCompleta();

                    listaPredio.Add(predioTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaPredio = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaPredio;

        }
    }
}
